﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;

namespace DAL.DBHelpers
{
    public class DBUser
    {
        public int Id { get; set; }
        public string MaSoNhanVien { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string FullName { get; set; }
        public string Avatar { get; set; }
        public DateTime Birthday { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
        public string Skype { get; set; }
        public string SoTaiKhoan { get; set; }
        public string MaSoThueCaNhan { get; set; }
        public int TrangThaiNhanVien { get; set; }
        public bool Active { get; set; }
        public int RoleId { get; set; }
        //Tìm thông tin User bằng Id
        public DBUser GetUserById(int userId)
        {
            List<SqlParameter> par = new List<SqlParameter>();
            par.Add(new SqlParameter("@id", userId));
            var user = DBHelper.GetList<DBUser>("sp_User_GetUserByIdOrUserName", par);
            if (user.Count == 0)
                return null;
            return user[0];
        }
        public DataTable GetDataTableUserById(int userId)
        {
            List<SqlParameter> par = new List<SqlParameter>();
            par.Add(new SqlParameter("@id", userId));
            var user = DBHelper.GetDataTableSP("sp_User_GetUserByIdOrUserName", par);
            if (user.Rows.Count==0)
            {
                return null;
            }
            else
            {
                return user;
            }
        }
        //Mã hóa bằng md5
        public string EncodeMd5(string originalString)
        {
            byte[] encodedBytes;
            var md5 = new MD5CryptoServiceProvider();
            var originalBytes = Encoding.Default.GetBytes(originalString);
            encodedBytes = md5.ComputeHash(originalBytes);
            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < encodedBytes.Length; i++)
            {
                strBuilder.Append(encodedBytes[i].ToString("x2"));
            }
            return strBuilder.ToString();
        }

        //Kiểm tra Username và password
        public bool ValidateUser(string username, string password)
        {
            bool returnValues = false;
            try
            {
                List<SqlParameter> par = new List<SqlParameter>();
                par.Add(new SqlParameter("@userName", username));
                par.Add(new SqlParameter("@pass", password));
                var table = DBHelper.GetDataTableSP("sp_User_ValidateUser", par);
                if (table.Rows.Count != 0)
                {
                    returnValues = true;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
            return returnValues;
        }

        //Tìm thông tin User bằng username
        public DBUser GetUserByName(string username)
        {
            List<SqlParameter> par = new List<SqlParameter>();
            par.Add(new SqlParameter("@userName", username));
            var tableUser = DBHelper.GetList<DBUser>("sp_User_GetUserByIdOrUserName", par);
            if (tableUser.Count > 0)
            {
                return tableUser[0];
            }
            else
            {
                return null;
            }
        }

        //Lấy thông tin tất cả User
        public List<DBUser> FindAllUser()
        {
            var tableUser = DBHelper.GetList<DBUser>("sp_User_GetAllUser");
            return tableUser;
        }

        //Lấy thông tin của tất cả các quyền 
        //public DataTable GetAllUserPermission()
        //{
        //    var userPermission = DBHelper.GetDataTableSP("GetAllUserPermission");
        //    return userPermission;
        //}

        //Lấy thông tin tất cả nhóm quyền
        //public DataTable GetAllUserRole()
        //{
        //    var userRole = DBHelper.GetDataTableSP("GetAllUserRole");
        //    return userRole;
        //}

        //Lấy tất cả các quyền của 1 nhom quyen
        //public DataTable GetListPermissionForRole(int roleid)
        //{
        //    try
        //    {
        //        List<SqlParameter> parameter = new List<SqlParameter>();
        //        parameter.Add(new SqlParameter("@roleId", roleid));
        //        var role = DBHelper.GetDataTableSP("GetAllPermissionForUserRole", parameter);
        //        return role;
        //    }
        //    catch
        //    {
        //        return null;
        //    }
        //}

        //Kiểm tra quyền trong 1 trang
        //public bool CheckPermission(int id, string permission)
        //{
        //    DataTable tb = new DataTable();
        //    List<SqlParameter> parameter = new List<SqlParameter>();
        //    parameter.Add(new SqlParameter("@userId", id));
        //    tb = DBHelper.GetDataTableSP("GetAllPermissionForCurrentId", parameter);
        //    if (tb == null) return false;
        //    string a = string.Empty;
        //    var listPermissionViewManager = tb.AsEnumerable().Where(item => item["SystemName"].ToString() == permission).ToList();
        //    if (listPermissionViewManager.Count() != 0)
        //    {
        //        return true;
        //    }
        //    return false;
        //}
    }
}